home *** CD-ROM | disk | FTP | other *** search
- DECLARE SUB BasicInt (IntType AS INTEGER)
- '
- ' Demonstration of using Interrupts via QBasic
- '
- TYPE REGISTERS
- AX AS INTEGER
- BX AS INTEGER
- CX AS INTEGER
- DX AS INTEGER
- DS AS INTEGER
- SI AS INTEGER
- ES AS INTEGER
- DI AS INTEGER
- FL AS INTEGER
- END TYPE
- DIM SHARED REGS AS REGISTERS
-
- '*************************************
- SCREEN 9
- COLOR 14, 1
- CLS
- LOCATE , 20
- PRINT "Loaded Services:"
- PRINT
-
- '************************
- REGS.AX = &H1A00
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " ANSI.SYS"
-
- '************************
- REGS.AX = &H4800
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " DOSKEY"
-
- '************************
- REGS.AX = &HB00
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " GRAFTABL"
-
- '************************
- REGS.AX = &H4300
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " HIMEM.SYS"
-
- '************************
- REGS.AX = &H100
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " Print Queue"
-
- '************************
- REGS.AX = &H1000
- CALL BasicInt(&H2F)
-
- IF (REGS.AX AND &HFF) = 0 THEN
- NotThere% = 1
- ELSE
- NotThere% = 0
- END IF
- GOSUB ListResult
- PRINT " SHARE"
-
- '************************
- REGS.AX = &H1500
- REGS.BX = 0
- CALL BasicInt(&H2F)
-
- PRINT
- PRINT SPACE$(20); "Number of CD-roms you have :";
- COLOR 13
- PRINT REGS.BX
- COLOR 14
- IF REGS.BX THEN
- PRINT SPACE$(20); "The first CD-rom unit is ";
- COLOR 13
- PRINT CHR$(ASC("A") + REGS.CX); ":"
- PRINT
- COLOR 14
- REGS.AX = &H150B
- REGS.BX = 0
- CALL BasicInt(&H2F)
-
- IF REGS.BX = &HADAD THEN
- NotThere% = 0
- ELSE
- NotThere% = 1
- END IF
- GOSUB ListResult
- PRINT " MSCDEX"
- END IF
-
- '************************
- REGS.AX = 0
- CALL BasicInt(&H33)
-
- PRINT
- IF REGS.AX THEN
- PRINT SPACE$(20); "You have a Mouse with"; REGS.BX; "buttons"
- PRINT
-
- REGS.AX = 1
- CALL BasicInt(&H33)
-
- PRINT " I will leave the Mouse cursor on until you press both buttons"
- PRINT SPACE$(20); "Try moving it around!"
- A = 1
- WHILE A
- REGS.AX = 3
- CALL BasicInt(&H33)
- LOCATE 1, 1
- PRINT USING "####"; REGS.CX; REGS.DX;
- LOCATE 23, 1
- PRINT USING "####"; REGS.CX; REGS.DX;
- LOCATE 1, 70
- IF (REGS.BX AND 1) THEN PRINT "L"; ELSE PRINT " ";
- LOCATE 1, 75
- IF (REGS.BX AND 2) THEN PRINT "R"; ELSE PRINT " ";
- IF (REGS.BX AND 3) = 3 THEN A = 0
- WEND
- REGS.AX = 2
- CALL BasicInt(&H33)
-
- BEEP
- ELSE
- PRINT SPACE$(20); "You don't have a mouse"
- END IF
-
- COLOR 11
- LOCATE 22
- PRINT SPACE$(15); "(press any key or click to end program)"
-
- ' wait for no key
- X$ = "X"
- WHILE LEN(X$)
- X$ = INKEY$
- WEND
-
- ' wait for no click
- A = 1
- WHILE A
- REGS.AX = 3
- CALL BasicInt(&H33)
- A = (REGS.BX AND 3)
- WEND
-
- ' wait for either key or click
-
- WHILE LEN(X$) = 0
- X$ = INKEY$
- REGS.AX = 3
- CALL BasicInt(&H33)
- IF (REGS.BX AND 1) THEN X$ = "X"
- WEND
-
- DEF SEG
- STOP
-
- '************************
- ' Subroutine to list the result
- '
- ListResult:
- LOCATE , 30
- IF NotThere% THEN
- COLOR 11
- PRINT "x";
- ELSE
- COLOR 13
- PRINT CHR$(251);
- END IF
- COLOR 14
- RETURN
-
- SUB BasicInt (IntType AS INTEGER) STATIC
-
- DIM ASM%(54)
- DEF SEG = VARSEG(ASM%(0))
-
- IF ASM%(1) = 0 THEN
- BLOAD "BASICINT.OVL", VARPTR(ASM%(0))
- END IF
-
- CALL ABSOLUTE(REGS, IntType, VARPTR(ASM%(0)))
-
- DEF SEG
-
- END SUB
-
-